if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register(superpwa_sw.url) .then(function(registration) { console.log('SuperPWA service worker ready'); if(registration.active) { registration.update(); } if(typeof firebase !='undefined' && typeof pushnotification_load_messaging =='function'){ const messaging = firebase.messaging(); messaging.useServiceWorker(registration); pushnotification_load_messaging(); } subOnlineOfflineIndicator(); }) .catch(function(error) { console.log('Registration failed with ' + error); }); /****************** Start : Online/Offline Indicator ******************/ // Variables & default values const snackbarTimeToHide = 5000; // 5s let isOffline = false, snackbarTimeoutHide = null, goOfflineMsg = superpwa_sw.offline_message_txt, backOnlineMsg = superpwa_sw.online_message_txt; /** * Subscribe to online offline indicator */ function subOnlineOfflineIndicator() { injectSnackbarHtml(); injectSnackbarCss(); runOnlineOfflineIndicator(); } /** * Inject html of snackbar */ function injectSnackbarHtml() { if (document.querySelector('.snackbar')) return; const container = document.createElement('div'); container.className = 'snackbar'; const parag = document.createElement('p'); parag.id = 'snackbar-msg'; container.appendChild(parag); const button = document.createElement('button'); button.type = 'button'; button.className = 'snackbar-close'; button.setAttribute('aria-label', 'Close ×'); button.addEventListener('click', hideSnackbar); button.innerHTML = '×'; container.appendChild(button); document.body.appendChild(container); window.addEventListener('online', runOnlineOfflineIndicator); window.addEventListener('offline', runOnlineOfflineIndicator); window.addEventListener('fetch',() => console.log("fetch")); // Clean snackbarTimeToHide varibale when user hover on the snackbar to prevent hide it container.addEventListener('mouseover', function () { if (snackbarTimeoutHide !== null) clearTimeout(snackbarTimeoutHide); }); // Call setTimeout and set snackbarTimeToHide variable to hide snackbar container.addEventListener('mouseout', function () { if (snackbarTimeoutHide !== null) snackbarTimeoutHide = setTimeout(hideSnackbar, snackbarTimeToHide / 2); }); } /** * Inject style css of snackbar */ function injectSnackbarCss() { const css = `body.snackbar--show .snackbar { -webkit-transform: translateY(0); transform: translateY(0); } .snackbar { box-sizing: border-box; background-color: #121213; color: #fff; padding: 10px 55px 10px 10px; position: fixed; z-index: 9999999999999999; left: 15px; bottom: 15px; border-radius: 5px 8px 8px 5px; max-width: 90%; min-height: 48px; line-height: 28px; font-size: 16px; -webkit-transform: translateY(150%); transform: translateY(150%); will-change: transform; -webkit-transition: -webkit-transform 200ms ease-in-out; -webkit-transition-delay: 0s; transition-delay: 0s; -webkit-transition: -webkit-transform 200ms ease-in-out false; transition: -webkit-transform 200ms ease-in-out false; transition: transform 200ms ease-in-out false; transition: transform 200ms ease-in-out false, -webkit-transform 200ms ease-in-out false; } .snackbar p { margin: 0; color: #fff; text-align: center; } .snackbar .snackbar-close { position: absolute; top: 0; right: 0; width: 45px; height: 100%; padding: 0; background: #2a2a2a; border: none; font-size: 28px; font-weight: normal; border-radius: 0 5px 5px 0; color: #FFF; font-family: Arial, Helvetica, sans-serif; } .snackbar .snackbar-close:hover, .snackbar .snackbar-close:focus { background: #3f3f3f; } .snackbar a { color: #FFF; font-weight: bold; text-decoration: underline; }`; const head = document.head || document.getElementsByTagName('head')[0]; const style = document.createElement('style'); style.type = 'text/css'; if (style.styleSheet) { // This is required for IE8 and below. style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } head.appendChild(style); } /** * Show the state of the mode of connectivity to the user : back onLine | go offLine */ function runOnlineOfflineIndicator() { if (navigator.onLine) { if (isOffline === true) { showSnackbar(backOnlineMsg); } isOffline = false; } else { if (superpwa_sw.offline_message == 1) { showSnackbar(goOfflineMsg); isOffline = true; } } } /** * Show with the given message in the snackbar * @param {String} msg */ function showSnackbar(msg) { document.getElementById('snackbar-msg').innerHTML = msg; document.body.classList.add('snackbar--show'); clearTimeout(snackbarTimeoutHide); snackbarTimeoutHide = setTimeout(hideSnackbar, snackbarTimeToHide); } /** * Hide snackbar */ function hideSnackbar() { document.body.classList.remove('snackbar--show'); } /****************** End : Online/Offline Indicator ******************/ var deferredPrompt; window.addEventListener('beforeinstallprompt', function(e){ deferredPrompt = e; if(deferredPrompt != null || deferredPrompt != undefined){ if(superpwa_sw.disable_addtohome==1){ deferredPrompt.preventDefault(); } var a2hsBanner = document.getElementsByClassName("superpwa-sticky-banner"); if(a2hsBanner.length){ deferredPrompt.preventDefault(); //Disable on desktop if(superpwa_sw.enableOnDesktop!=1 && !window.mobileCheck()){return ;} if(typeof super_check_bar_closed_or_not == 'function' && !super_check_bar_closed_or_not()){return ;} for (var i = 0; i < a2hsBanner.length; i++) { var showbanner = a2hsBanner[i].getAttribute("data-show"); a2hsBanner[i].style.display="flex"; } } document.cookie = "hidecta=no"; } }) window.addEventListener('appinstalled', function(evt){ var a2hsBanner = document.getElementsByClassName("superpwa-sticky-banner"); if(a2hsBanner.length){ for (var i = 0; i < a2hsBanner.length; i++) { var showbanner = a2hsBanner[i].getAttribute("data-show"); document.cookie = "hidecta=yes"; a2hsBanner[i].style.display="none"; } } }); var a2hsviaClass = document.getElementsByClassName("superpwa-add-via-class"); if(a2hsviaClass !== null){ for (var i = 0; i < a2hsviaClass.length; i++) { a2hsviaClass[i].addEventListener("click", addToHome); } } function addToHome(){ if(!deferredPrompt){return ;} deferredPrompt.prompt(); deferredPrompt.userChoice.then(function(choiceResult) { if (choiceResult.outcome === "accepted") { var a2hsBanner = document.getElementsByClassName("superpwa-sticky-banner"); if(a2hsBanner){ for (var i = 0; i < a2hsBanner.length; i++) { var showbanner = a2hsBanner[i].getAttribute("data-show"); a2hsBanner[i].style.display="none"; } }//a2hsBanner if console.log("User accepted the prompt"); }else{ console.log("User dismissed the prompt"); } deferredPrompt = null; }); } // function closed addToHome }); } window.mobileCheck = function() { let check = false; (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); return check; }; window.addEventListener('load', function() { let manifest_name = superpwa_sw.manifest_name ?? 'superpwa-manifest.json'; var manifestLink = document.querySelectorAll("link[rel='manifest']"); if(manifestLink.length > 1){ for (var i = 0; i < manifestLink.length; i++) { var href = manifestLink[i].getAttribute("href"); if(href.indexOf(manifest_name) == -1){ manifestLink[i].remove(); } } } // fix for href="#" in Ios safari standalone var ua = window.navigator.userAgent; var iOS = ua.match(/iPad/i) || ua.match(/iPhone/i); var webkit = ua.match(/WebKit/i); var iOSSafari = iOS && webkit && !ua.match(/CriOS/i); if(iOSSafari && (window.matchMedia('(display-mode: standalone)').matches)){ setTimeout(function(){ const anchor_fix = document.querySelectorAll("a[href='#']"); if(anchor_fix.length > 1){ for (var i = 0; i < anchor_fix.length; i++) { anchor_fix[i].setAttribute("href","javascript:void(0);"); } } },600); } }); document.addEventListener('DOMContentLoaded', function () { if (typeof pnScriptSetting !== 'undefined' && pnScriptSetting.superpwa_apk_only !== undefined && pnScriptSetting.superpwa_apk_only == 1) { const reffer = document.referrer; if (reffer && reffer.includes('android-app://')) { sessionStorage.setItem('superpwa_mode', 'apk'); } } }); if (superpwa_sw.offline_form_addon_active) { navigator.serviceWorker.ready.then(function (registration) { return registration.sync.register('superpwa_form_sendFormData') }).then(function () { console.log('sync event registered'); }).catch(function () { console.log('sync registration failed') }); function superpwa_formSubmitOptions(event) { var finalData = {}; var inputElements = document.querySelectorAll('input, textarea, select');/*closest('form')*/ for (let elem of inputElements) { if (elem.getAttribute('type') == 'radio') { let chk_name_radio = elem.getAttribute('name'); var parent_div = elem.closest('.frm_opt_container') if (parent_div.getAttribute('aria-required') == 'true') { let chk_value = parent_div.querySelectorAll('input[name=\"' + chk_name_radio + '\"]:checked'); if (chk_value.length == 0) { event.preventDefault(); event.stopPropagation(); alert('Please fill all mandatory fields'); return; } } } if (!elem.value && ((elem.getAttribute('aria-required') == 'true' || elem.getAttribute('required')) && elem.offsetParent !== null)) { event.preventDefault(); event.stopPropagation(); alert('Please fill all mandatory fields'); return; } var name = elem.getAttribute('name'); if (name) { //name=name.replace(/[\[']/g, '_').replace(/[\]']/g, ''); if (elem.getAttribute('type') == 'checkbox') { if (elem.checked) { finalData[name] = elem.value; } } else if (elem.getAttribute('type') == 'radio') { if (elem.checked) { finalData[name] = elem.value; } } else { finalData[name] = elem.value; } } } if (JSON.stringify(finalData) !== '{}') { var allData = { 'form_data': finalData, 'action': 'form_submit_data' }; /* send data in serviceWorker */ navigator.serviceWorker.ready.then((registration) => { registration.active.postMessage(allData); event.stopPropagation(); }); } else { event.preventDefault(); event.stopPropagation(); alert('Error occured during form submission, please try again'); return; } } function handleGravityMultistep(btn_type, event) { let target_parent = event.parentNode.parentNode; let go_next = false; if (btn_type == 'previous') { target_parent.style.display = 'none'; let prev_id = target_parent.previousElementSibling.id; let source_page = document.querySelector('input[name^=\"gform_source_page_number_\"]'); let target_page = document.querySelector('input[name^=\"gform_target_page_number_\"]'); source_page.value = parseInt(source_page.value) - 1; target_page.value = parseInt(target_page.value) - 1; if (prev_id) { document.getElementById(prev_id).style.display = 'block'; } } else { let inputs = target_parent.querySelectorAll('input, textarea, select'); for (let elem of inputs) { let req_flag = elem.getAttribute('aria-required'); if (req_flag == 'true' && (elem.getAttribute('type') == 'checkbox' || elem.getAttribute('type') == 'radio')) { let chk_name = elem.getAttribute('name'); let chk_value = target_parent.querySelectorAll('input[name=\"' + chk_name + '\"]:checked'); if (!chk_value.length) { go_next = false; break; } else { go_next = true; } } else { if (!elem.value) { go_next = false; break; } else { go_next = true; } } } if (go_next == true) { target_parent.style.display = 'none'; let next_id = target_parent.nextElementSibling.id; let source_page = document.querySelector('input[name^=\"gform_source_page_number_\"]'); let target_page = document.querySelector('input[name^=\"gform_target_page_number_\"]'); let gform_wrapper = document.querySelector('.gform_wrapper'); let total_page = gform_wrapper.getAttribute('id').split('_')[2]; source_page.value = parseInt(source_page.value) + 1; if (target_page < total_page) { target_page.value = parseInt(target_page.value) + 1; } else { target_page.value = 0; } if (next_id) { document.getElementById(next_id).style.display = 'block'; } } else { alert('Please fill correct values in all mandatory fields'); } } } window.addEventListener('online', (e) => { updateOnlineStatus(e) }); function updateOnlineStatus(event) { setTimeout(window.location.reload(),3000); } window.onload = function (event) { console.log('Page Load'); if (!navigator.onLine) { updateOfflineStatus(event); superpwapro_woo_xtheme_compat(); } window.addEventListener('offline', (e) => { updateOfflineStatus(e); superpwapro_woo_xtheme_compat(); reRenderPage(); }); fallbackForIosSync(); var our_db; function fallbackForIosSync() { var isSyncSupported = ('serviceWorker' in navigator && 'SyncManager' in window); if (!isSyncSupported && navigator.onLine) { var indexedDBOpenRequest = indexedDB.open('superpwaForm', 2); indexedDBOpenRequest.onerror = function (error) { console.error('IndexedDB error:', error) } indexedDBOpenRequest.onupgradeneeded = function () { if (!this.result.objectStoreNames.contains('post_requests')) { this.result.createObjectStore('post_requests', { autoIncrement: true, keyPath: 'id' }) } } indexedDBOpenRequest.onsuccess = function () { our_db = this.result; sendPostToServerAjax(); } } } function reRenderPage() { var condition = navigator.onLine ? 'online' : 'offline'; if (condition == 'offline') { var formElement = document.querySelector('form[method=\"post\"]'); if (formElement && (formElement.classList.contains('frm-fluent-form') || formElement.querySelector('.frm_dropzone'))) { // window.location.reload(); } } } function updateOfflineStatus(event) { var condition = navigator.onLine ? 'online' : 'offline'; if (condition == 'offline') { setTimeout(() => { var formElement = document.querySelectorAll('form[method=\"post\"]'); if (formElement && formElement.length > 0) { for (var i = 0; i < formElement.length; i++) { // Fluent Form Compatibility if (formElement[i].hasAttribute('data-form_instance') && formElement[i].classList.contains('frm-fluent-form')) { var class_to_remove = formElement[i].getAttribute('data-form_instance'); formElement[i].classList.remove(class_to_remove) } // Fix for Formidable form not adding data due to anti-spam javascript if (formElement[i].hasAttribute('data-token')) { const antispamInput = document.createElement('input'); antispamInput.type = 'hidden'; antispamInput.value = formElement[i].getAttribute('data-token'); antispamInput.name = 'antispam_token'; formElement[i].appendChild(antispamInput); } if (formElement[i].querySelector('button[type=\"submit\"]')) { let ourEle = formElement[i].querySelector('button[type=\"submit\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); } if (formElement[i].querySelector('button[type=\"button\"]')) { let ourEle = formElement[i].querySelector('button[type=\"button\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); } if (formElement[i].querySelector('input[type=\"submit\"]')) { let ourEle = formElement[i].querySelector('input[type=\"submit\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); } formElement[i].addEventListener('submit', superpwa_formSubmitOptions, true); } } //For Formidable Form ajax upload field var inputs = document.getElementsByTagName('input'); if (inputs && inputs.length) { for (var i = 0; i < inputs.length; i++) { if (inputs[i].type.toLowerCase() == 'file') { if (document.querySelector('.dz-error-message')) { document.querySelector('.dz-error-message').remove(); setTimeout( function () { document.querySelector('.dz-error-message').innerHTML = ''; }, 500); } } } } // Fix for Formidable Ajax uploads var frm_dropzone_attrs = document.querySelectorAll('.frm_dropzone'); if (frm_dropzone_attrs && frm_dropzone_attrs.length > 0) { frm_dropzone_attrs.forEach(ele => { var container_id = ele.id; container_id = container_id.match(/\d+/); const upload_input_parent = ele.closest('.frm_form_field'); var upload_input = upload_input_parent.querySelector('.dz-hidden-input'); if (upload_input) { upload_input.setAttribute("data-containerid", container_id); } }); } var frm_dropzone_ele = document.querySelectorAll('.dz-hidden-input'); if (frm_dropzone_ele && frm_dropzone_ele.length > 0) { frm_dropzone_ele.forEach(ele => { ele.addEventListener('change', (function (e) { if (e.target.files[0] || e.target) { var formElement = document.querySelector('form[method="post"]'); var field_id = e.target.getAttribute("data-containerid"); var field_id_label = 'file' + field_id; var object1 = {}; object1['action'] = 'frm_submit_dropzone'; object1['field_id'] = field_id; object1['form_id'] = document.querySelector('[name="form_id"]').value; object1['nonce'] = frm_js.nonce; object1['antispam_token'] = formElement.getAttribute('data-token'); object1[field_id_label] = e.target.files[0]; saveAddlAjaxSubmits(frm_js.ajax_url, object1); } })); }); } // For Gravity Form multistep form let gform_next_buttons = document.querySelectorAll('.gform_next_button'); let gform_previous_button = document.querySelectorAll('.gform_previous_button'); if (gform_next_buttons.length > 0) { gform_next_buttons.forEach(button => { button.setAttribute('onclick', 'handleGravityMultistep("next",this)'); button.setAttribute('onkeypress', 'handleGravityMultistep("next",this)'); button.setAttribute('type', 'button'); }); } if (gform_previous_button.length > 0) { gform_previous_button.forEach(button => { button.setAttribute('onclick', 'handleGravityMultistep(\"previous\",this)'); button.setAttribute('onkeypress', 'handleGravityMultistep(\"previous\",this)'); button.setAttribute('type', 'button'); }); } }, 500); } } function sendPostToServerAjax() { var savedRequests = []; var objStore = getObjectStore('ajax_requests'); if (!!objStore) { var req = getObjectStore('ajax_requests').openCursor() // FOLDERNAME is 'ajax_requests' req.onsuccess = async function (event) { var cursor = event.target.result if (cursor) { // Keep moving the cursor forward and collecting saved requests. savedRequests.push(cursor.value) cursor.continue() } else { if (savedRequests && savedRequests.length) { for (let savedRequest of savedRequests) { var formData = new FormData(); for (const [key, value] of Object.entries(savedRequest.payload)) { formData.append(key, value); } var requestUrl = savedRequest.url var payload = JSON.stringify(savedRequest.payload) var method = savedRequest.method /*request to forms*/ var headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', } // if you have any other headers put them here fetch(superpwa_sw.ajax_url+'?action=superpwa_form_store_send', { headers: headers, method: method, body: formData }).then(function (response) { if (response.status < 400) { // If sending the POST request was successful, then remove it from the IndexedDB. getObjectStore('ajax_requests', 'readwrite').delete(savedRequest.id); return response.json(); } return false; }).then(function (response) { if (response) { sendPostToServer([response[0], savedRequest.payload.field_id]); console.log('Form Submitted with ajax fields : success'); } else { sendPostToServer(); console.log('Form Submitted without ajax fields : ajax fields present but their saving failed to db'); } }); } } else { sendPostToServer(); console.log('Form Submitted without ajax fields : no values present in ajax_requests object'); } } } req.onerror = function (error) { sendPostToServer(); } } else { sendPostToServer(); } } function sendPostToServer(ajax_params = null) { var savedRequests = []; var objStore = getObjectStore('post_requests'); if (!!objStore) { var req = getObjectStore('post_requests').openCursor(); req.onsuccess = async function (event) { var cursor = event.target.result; if (cursor) { // Keep moving the cursor forward and collecting saved requests. savedRequests.push(cursor.value); cursor.continue(); } else { // Process each saved request. for (let savedRequest of savedRequests) { var formData = new FormData(); for (const [key, value] of Object.entries(savedRequest.payload)) { formData.append(key, value); } if (ajax_params && ajax_params.length && ajax_params[0]) { formData.set('item_meta[' + ajax_params[1] + ']', ajax_params[0]); } var requestUrl = savedRequest.url; var method = savedRequest.method; /* Request to admin-ajax.php */ var headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', // Add any other headers here if needed }; try { const response = await fetch(requestUrl, { headers: headers, method: method, body: formData }); console.log('server response', response); if (response.status < 400) { // If sending the POST request was successful, then remove it from the IndexedDB. try { var forDataSave = {}; formData.forEach(function (value, key) { forDataSave[key] = value; }); var forDataSaveJson = JSON.stringify(forDataSave); const response = await fetch(superpwa_sw.ajax_url+'?action=superpwa_form_store_send', { headers: headers, method: method, body: forDataSaveJson, }); console.log('saved request', savedRequest); if (response.status < 400) { // If successful, remove the request from IndexedDB. await getObjectStore('post_requests', 'readwrite').delete(savedRequest.id); } } catch (error) { console.error('Send to Server failed:', error); throw error; } } else { console.error('Server responded with an error:', response.status); // Handle the error as needed } } catch (error) { console.error('Send to Server failed:', error); // Handle the error as needed throw error; // Rethrow the error if necessary } } } }; } } function getObjectStore(storeName, mode) { if (!our_db) { return null; } // retrieve our object store return our_db.transaction(storeName, mode).objectStore(storeName) } function saveAddlAjaxSubmits(submit_url, obj) { /*send data in serviceWorker*/ var indexedDBOpenRequest = indexedDB.open('superpwaForm', 2); indexedDBOpenRequest.onerror = (event) => { console.error('a post form request has been not added to IndexedDB'); }; indexedDBOpenRequest.onupgradeneeded = (event) => { const db = event.target.result; if (!db.objectStoreNames.contains('ajax_requests')) { db.createObjectStore('ajax_requests', { autoIncrement: true, keyPath: 'id' }); } } indexedDBOpenRequest.onsuccess = (event) => { const db = event.target.result; var request = db.transaction('ajax_requests', 'readwrite').objectStore('ajax_requests').add({ url: submit_url, payload: obj, method: 'POST' }) request.onsuccess = function (event) { console.log('a post form request has been added to indexedb') } request.onerror = function (error) { console.error(error) } } } function superpwapro_woo_xtheme_compat(){ if(document.querySelector('.add_to_cart_button')){ document.addEventListener("click", function (event) { if (event.target.closest(".add_to_cart_button")) { event.preventDefault(); event.stopPropagation(); const button = event.target.closest(".add_to_cart_button"); const parentele = button.parentNode; const qty_wrapper = parentele.querySelector(".quantity-wrapper"); const qty = qty_wrapper.querySelector(".qty"); qty.value = 1; if(qty_wrapper){ qty_wrapper.classList.add('is-added'); } const addToCartUrl = location.href+'?wc-ajax=add_to_cart'; var object_payload = {}; object_payload['product_name'] = button.getAttribute("data-product_name"); object_payload['success_message'] = button.getAttribute("data-success_message"); object_payload['product_sku'] = button.getAttribute("data-product_sku"); object_payload['product_id'] = button.getAttribute("data-product_id"); object_payload['quantity'] = 1; saveAddlAjaxSubmits(addToCartUrl, object_payload); } }); }else{ console.log('add_to_cart_button not found'); } if(document.querySelector('.quantity-wrapper .minus')){ document.addEventListener('click', function (event) { if (event.target.closest('.quantity-wrapper .minus')) { event.preventDefault(); event.stopPropagation(); const minus = event.target.closest('.quantity-wrapper .minus'); const minus_parent = minus.parentNode.parentNode.parentNode; const button = minus_parent.querySelector('.add_to_cart_button'); const qty_wrapper = minus_parent.querySelector('.quantity-wrapper'); const qty_input = minus_parent.querySelector('.quantity-wrapper .qty'); const product_id = button.getAttribute('data-product_id'); //qty_input.value = qty_input.value < 2 ? 0 : parseInt(qty_input.value) - 1; if(qty_input.value == 0){ qty_wrapper.classList.remove('is-added'); } setTimeout( function () { qty_wrapper.querySelectorAll('.blockUI').forEach(el => el.remove()); }, 5000); const addToCartUrl = '/wp-admin/admin-ajax.php'; var object_payload = {}; object_payload['action'] = 'etheme_update_cart_item_quantity_by_id'; object_payload['item_id'] = product_id; object_payload['qty'] = qty_input.value; saveAddlAjaxSubmits(addToCartUrl, object_payload); } }); } if(document.querySelector('.quantity-wrapper .plus')){ document.addEventListener('click', function (event) { if (event.target.closest('.quantity-wrapper .plus')) { event.preventDefault(); event.stopPropagation(); const plus = event.target.closest('.quantity-wrapper .plus'); const plus_parent =plus.parentNode.parentNode.parentNode; const button = plus_parent.querySelector('.add_to_cart_button'); const qty_wrapper = plus_parent.querySelector('.quantity-wrapper'); const qty_input = plus_parent.querySelector('.quantity-wrapper .qty'); const product_id = button.getAttribute('data-product_id'); //qty_input.value = parseInt(qty_input.value) + 1; setTimeout( function () { qty_wrapper.querySelectorAll('.blockUI').forEach(el => el.remove()); }, 5000); qty_wrapper.classList.add('is-added'); const addToCartUrl = '/wp-admin/admin-ajax.php'; var object_payload = {}; object_payload['action'] = 'etheme_update_cart_item_quantity_by_id'; object_payload['item_id'] = product_id; object_payload['qty'] = qty_input.value; saveAddlAjaxSubmits(addToCartUrl, object_payload); } }); } } } }